In many of today's distributed computing environment, it is often desirable to centrally maintain files that may be shared by multiple clients. A conventional distributed file system is typically used to facilitate the sharing of files. In such a system, a client may obtain access to a shared file by actively interacting with a file server that maintains the shared file. In particular, the client may obtain a file handle from the file server and may modify the file by communicating changes to the file server. Such a file sharing technique is commonly referred to as live sharing. Because large amount of communications between the file server and the clients is necessary for this type of file sharing, the resource overhead associated with live sharing can be very substantial.
Currently, some distributed file systems allow clients to cache file data in the clients' computer memories. In particular, a client may store in its memory local copies of files and directories that are managed by a file server. These local copies facilitate file sharing by enabling the client to readily ascertain what files and directories are available on the server. However, the client must periodically contact the server to synchronize the cached file data in order to ensure that the data are up to date. Synchronizing cached file data is an expensive proposition, especially for a server with many clients that cache file data. For example, when a client reconnects with a server after a period of time of being disconnected, the client must synchronize the entire file data that are cached from the server because the client does not know which files or directories on the server were modified during the disconnection period. Because the work associated with synchronization is proportional to the number of files and directories that are cached, some systems limit the number of files and directories that each client is allowed to cache.
Recently, the mobile computing environment has become increasingly popular. In such an environment, mobile clients can often be disconnected from the network for an extended period of time. This poses a special challenge for distributed file systems. For example, the required synchronization cannot occur while the mobile clients are not connected to the network. In addition, users increasingly want clients to cache a substantial portion of server files and directories. These cached data must be synchronized when the mobile clients are reconnected to the network. Synchronizing of this large amount of data requires a significant amount of client/server communications and computing resources, a situation that is prohibitive in many applications.
An effective and efficient method for caching files by clients in a distributed file system eludes those skilled in the art.